package com.dingding.web.wechat.handler;

import java.util.Map;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import com.dingding.common.core.util.ToolUtil;
import com.dingding.common.core.util.XMLParse;

/**
 * @Description: 微信xml消息处理器
 * @author fengshuonan
 * @date 2016年4月27日 下午5:02:35
 */
@Component("wechatXmlHandler")
public class WechatXmlHandler {

	private Logger log = Logger.getLogger(WechatXmlHandler.class);

	@Resource(name = "eventXmlHandler")
	private AbstractRequestHandler eventXmlHandler;
	
	@Resource(name = "usualXmlHandler")
	private AbstractRequestHandler usualXmlHandler;
	

	/**
	 * @Description: 处理微信发送过来的xml，并封装相应的xml发送给微信
	 * @param xml 微信传到本地服务器的信息
	 * @return String 返回给微信的信息
	 * @author fengshuonan
	 */
	public String messageDispose(String xml) {

		Map<String, String> map = XMLParse.xmlToMap(xml);

		if (map == null || (map != null && map.size() <= 0)) {
			log.error("接收到微信传来的信息无法获取类型信息！WechatXmlHandler : messageDispose()");
			return null;
		}

		log.info("接收到微信传来的信息！消息类型是：" + map.get("MsgType") + "\n" + "xml内容为：" + xml);

		if ("event".equals(map.get("MsgType"))) {
			return eventMessageDispose(map, xml);
		} else {
			return usualMessageDispose(map, xml);
		}

	}

	/**
	 * @Description: 处理事件类型消息
	 * @param map 微信请求到服务器的所有信息的封装，map形式
	 * @prame xml 微信请求到服务器的请求信息的xml形式
	 * @return 返回给微信服务器的内容
	 * @author fengshuonan
	 */
	public String eventMessageDispose(Map<String, String> map, String xml) {
		
		String eventType = map.get("Event");
		
		if(ToolUtil.isBlank(eventType)){
			log.error("获取不到微信xml消息的类型！WechatXmlHandler:eventMessageDispose()");
			return null;
		}
		
		return this.eventXmlHandler.dispose(eventType, xml);
	}

	/**
	 * @Description: 处理文字或其他类型消息
	 * @param map 微信请求到服务器的所有信息的封装，map形式
	 * @prame xml 微信请求到服务器的请求信息的xml形式
	 * @return 返回给微信服务器的内容
	 * @author fengshuonan
	 */
	public String usualMessageDispose(Map<String, String> map, String xml) {
		return null;
	}

}
